<?php

/**
 * Description of RepoProducto
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoProducto extends Repositorio
{

  function __construct()
  {
    $this->tabla = "producto";
    $this->id = "idProducto";
  }

  function agregar(Producto $producto)
  {
    try
    {

      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "INSERT INTO " . $this->tabla . "(descripcion, precio, costo, usuario, deshabilitado) values (";
      $query .= "'" . $producto->getDescripcion() . "', ";
      $query .= $producto->getPrecio() . ", ";
      $query .= $producto->getCosto() . ", ";
      $query .= "'" . $producto->getUsuario() . "', ";
      $query .= $producto->getDeshabilitado() . ")";
      $result = $this->PostSQL($query);
      $this->commitTransaction();
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex->getCode() + "|" + $ex->getMessage();
    }
  }

  function modificar(Producto $producto)
  {
    try
    {
      $link = $this->OpenDB();
      $this->beginTransaction();
      if ($this->VerificarVersion($producto->getVersion(), $producto->getId()))
      {
        $query = "UPDATE " . $this->tabla . " SET ";
        $query .= "descripcion = '" . $producto->getDescripcion() . "', ";
        $query .= "precio = " . $producto->getPrecio() . ", ";
        $query .= "costo = " . $producto->getCosto() . ", ";
        $query .= "usuario = '" . $producto->getUsuario() . "', ";
        $query .= "deshabilitado = " . $producto->getDeshabilitado() . " ";
        $query .= "WHERE " . $this->id . " = " . $producto->getId();
        $result = $this->PostSQL($query);
        $this->commitTransaction();
        $this->CloseDB($link);
        return $result;
      } else
      {
        $this->rollbackTransaction();
        $this->CloseDB($link);
        throw new Exception("El registro ha sido modificado por otro usuario", ERROR_VERSION);
      }
    } catch (Exception $ex)
    {
      return $ex->getCode() + "|" + $ex->getMessage();
    }
  }

  function listarHabilitados()
  {
    $link = $this->OpenDB();
    $query = "SELECT idProducto, descripcion, precio, costo, CONVERT(BIGINT,version) as version FROM " . $this->tabla . " WHERE deshabilitado = 0";
    $productosObj = $this->GetSQL($query);
    $productos = null;
    foreach ($productosObj as $gabineteObj)
    {
      $producto = new Producto();
      $producto->setDescripcion($gabineteObj->descripcion);
      $producto->setVersion($gabineteObj->version);
      $producto->setPrecio($gabineteObj->precio);
      $producto->setCosto($gabineteObj->costo);
      $producto->setId($gabineteObj->idProducto);
      $producto->setDeshabilitado(0);
      $productos[] = $producto;
    }
    $this->CloseDB($link);
    return $productos;
  }

  function listar()
  {
    $link = $this->OpenDB();
    $query = "SELECT idProducto, descripcion, precio, costo, CONVERT(BIGINT,version) as version FROM " . $this->tabla;
    $productosObj = $this->GetSQL($query);
    $productos = null;
    foreach ($productosObj as $gabineteObj)
    {
      $producto = new Producto();
      $producto->setDescripcion($gabineteObj->descripcion);
      $producto->setVersion($gabineteObj->version);
      $producto->setPrecio($gabineteObj->precio);
      $producto->setCosto($gabineteObj->costo);
      $producto->setId($gabineteObj->idProducto);
      $producto->setDeshabilitado(0);
      $productos[] = $producto;
    }
    $this->CloseDB($link);
    return $productos;
  }

  function buscar($id)
  {
    $link = $this->OpenDB();
    $queryTxt = "SELECT descripcion, precio, costo, deshabilitado, CONVERT(BIGINT,version) as version FROM " . $this->tabla . " WHERE 
      " . $this->id . " = " . $id;
    $query = $this->GetSQL($queryTxt);
    $producto = new Producto();
    $producto->setCosto($query[0]->costo);
    $producto->setVersion($query[0]->version);
    $producto->setDescripcion($query[0]->descripcion);
    $producto->setId($id);
    $producto->setPrecio($query[0]->precio);
    $producto->setDeshabilitado($query[0]->deshabilitado);
    $this->CloseDB($link);
    return $producto;
  }

  function buscarPorTratmiento(Tratamiento $tratamiento)
  {
    $this->OpenDB();
    $query = $this->PostSQL("SELECT producto FROM tratamiento_producto WHERE tratamiento = " . $tratamiento->getId() . "");
    $array = array();
    for ($i = 0; $i < mssql_num_rows($query); $i++)
    {
      $producto = $this->buscar(mssql_result($query, $i, 'producto'));
      $array[$i] = $producto;
    }
    return $array;
  }

}

?>
